package com.ms.qw.application.usuario;

import com.ms.seguridad.domain.model.Usuario;
import com.ms.seguridad.domain.model.UsuarioRepository;
import com.ms.support.mapper.DTOMapperService;
import com.ms.qw.application.mappers.UsuarioMapper;
import com.ms.qw.server.infrastructure.persistence.exception.ApplicationException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

@Component
public class RegistroUsuarioAppImpl implements RegistroUsuarioApp {

    @Autowired
    DTOMapperService mapperService;

    @Autowired
    UsuarioRepository usuarioRepository;

    @Autowired
    UsuarioMapper usuarioMapper;


    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void delete(Usuario usuario) {
        usuarioRepository.remove(usuario);
    }

    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void save(Usuario usuario, boolean updateMode) {
        if (updateMode) {
            usuarioRepository.merge(usuario);
        } else {
            int cont = usuarioMapper.usuarioByLogin(usuario.getLogin());
            if (cont > 0) {
                throw new ApplicationException("El login '" + usuario.getLogin() + "' ya esta registrado");
            }
            usuarioRepository.persist(usuario);
        }
    }
}
